草庐IT

C++ ostringstream 奇怪的行为

全部标签

C++ 删除 static_cast<void*> (指针)行为

假设代码执行以下操作:T*pointer=newT();deletestatic_cast(pointer);结果是什么?未定义,内存泄漏,内存被删除? 最佳答案 行为未定义。关于delete表达式,C++标准说:Inthefirstalternative(deleteobject),ifthestatictypeoftheoperandisdifferentfromitsdynamictype,thestatictypeshallbeabaseclassoftheoperand’sdynamictypeandthestaticty

c++ - STL operator= Visual Studio 2010 的行为发生变化?

我正在尝试使用VisualStudio2010(C++)编译QtScriptGenerator(gitorious),但遇到了编译错误。在寻找解决方案的过程中,我偶尔会看到自VS2008以来由于VS2010的STL实现的变化和/或c++0x一致性变化而引入的编译破损。知道下面发生了什么,或者我该如何解决它?如果有问题的代码似乎是QtScriptGenerator的,我想我会更容易修复它。但在我看来,有问题的代码可能在VS2010的STL实现中,我可能需要创建一个解决方法?附言。我对模板和STL很陌生。我有嵌入式和控制台项目的背景,这些项目直到最近才经常被避免以减少内存消耗和交叉编译器风

const 时的 C++ 行为

这是一个基本结构(我希望如此)structSomeType{floata;floatb;floatc;floatd;SomeType(float,float,float,float);};和出处SomeType::SomeType(floatna,floatnb,floatnc,floatnd):a(na),b(nb),c(nc),d(nd){}我有课structSomeClass{staticconstSomeTypev;SomeClass();};当我初始化它的时候constSomeTypeSomeClass::v(0,0,0,0);我的值变为inf或nan或-nan。有人以前见过

c++ - 奇怪的代码破坏了 MSVC 中的构建。这是什么意思?

我正在尝试将rapidxml包含到我当前的项目中。但是,它不会构建。VisualStudio会提示这段代码(rapidxml.hpp:419+451):419:void*memory=allocate_aligned(sizeof(xml_attribute));420:xml_attribute*attribute=new(memory)xml_attribute;编译器会说rapidxml.hpp(420):errorC2061:syntaxerror:identifier'memory'我有点明白这会如何混淆编译器。它实际上也让我很困惑。什么是(memory)的一部分new(me

c++ - ostringstream 的奇怪行为

我试图想出一种聪明的方法来将各种东西连接到一个函数的单个字符串参数中,而不必显式使用ostringstream。我想到了:#defineOSS(...)\dynamic_cast(std::ostringstream()但是,给定:voidf(stringconst&s){cout运行时打印:123hello}{hello}其中123是的ASCII代码。为什么使用宏会出错?仅供引用:我目前在MacOSX上使用g++4.2.1作为Xcode3.x的一部分。我现在使用的解决方案classstring_builder{public:templatestring_builder&operato

c++ - 使用 C++ 的编译时 RAII 行为类型

我知道这听起来有点奇怪,但这是我想做的:假设我有一个函数voidf()并且我想为此方法添加跟踪。我想通过跟踪消息(例如“输入函数f”和“退出函数f”)来跟踪此函数的输入和函数的退出。我不想为入口和导出添加手动跟踪条目,因为我可能会错过一些返回路径。因此可以在编译时使用模板魔术并自动生成这些字符串。即我想要实现的是voidf(){some_template("f");}这应该在构造函数中添加跟踪消息“Enteredfunctionf”,在析构函数中添加“Exitedfunctionf”。我希望它在编译时不创建任何运行时对象。在C++中可能吗?如果可以实现,我可以在哪里找到更多信息的任何指

c++ - 动态转换和静态转换的奇怪行为

这个程序运行没有任何异常。您能否解释一下为什么动态转换和静态转换会成功?以及C++如何设法解析所需的虚函数?classShape{private:stringhelperFunction();public:virtualvoiddraw()=0;virtualvoidtype();};voidShape::type(){coutshapes;Circlecircle;Squaresquare;shapes.push_back(&circle);shapes.push_back(&square);vector::const_iteratori;for(i=shapes.begin();i

c++ - 奇怪的类重新定义错误

我有一个奇怪的错误,说我的类正在重新定义,源于我的Node类中的friend声明。这是我当前的代码:templateclassNode{private:Tval;Node*next;public:friendclassOList;};任何我的其他类(class):templateclassOList{------>Errorhereprivate:Node*head;intsize;public:OList();OList(constOList&b);~OList();clear();intsize();TtGet(intinput);intcount(Tinput);insert(T

c++ - Lambda 函数,奇怪的行为

假设我们在全局命名空间中声明了以下lambda:autoLess=[](inta,intb)->bool{returna以及以下使用此lambda的代码:templatestructfoo{foo(intv){}booloperator&)const{returnT(1,2);}};intmain(){typedeffoobe_less;priority_queuedata;}如你所见,我使用Less作为结构foo的模板参数.对于g++4.9.2,此代码无法编译:test1.cpp:13:21:error:nomatchingfunctionforcallto'::__lambda0(

c++ - 在函数参数未定义行为中使用赋值运算符吗?

我在大学导师写的一个例子中找到了一些类似的代码。intmain(){inta=3;intb=5;std::vectorarr;arr.push_back(a*=b);std::cout是否有明确定义的行为?arr[0]是3还是15(或者完全不同的其他值)?VisualStudio输出15,但我不知道其他编译器是否会这样响应它。 最佳答案 在执行push_back之前,需要计算作为参数传递的表达式。那么a*=b的值是多少。好吧,它将始终是a*b并且a的新值也将设置为该值。 关于c++-在函